package values

import (
	"time"
)

type TypeBase interface {
	string | bool | TypeNumber | TypeTime
}
type TypeBaseSlice interface {
	[]string | []bool |
		[]int | []int8 | []int16 | []int32 | []int64 |
		[]uint | []uint8 | []uint16 | []uint32 | []uint64 |
		[]float32 | []float64 |
		[]time.Time | []time.Duration | []time.Month | []time.Weekday
}
type TypeNumber interface {
	TypeInt | TypeUint | TypeFloat
}
type TypeInt interface {
	int | int8 | int16 | int32 | int64 // rune => int32
}
type TypeUint interface {
	uint | uint8 | uint16 | uint32 | uint64 // byte => uint8  uintptr => uint32/uint64
}
type TypeFloat interface {
	float32 | float64
}
type TypeTime interface {
	time.Time | time.Duration | time.Month | time.Weekday
}
type TypeSliceAny []any
type TypeSliceBase[T TypeBase] []T
type TypeMapBaseAny[K TypeBase] map[K]any
type TypeMapComparableAny[K comparable] map[K]any
type TypeMapBaseAs[K TypeBase, V TypeBase] map[K]V
